﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using Entidades;
using System.Collections;
using System.Data.SqlClient;

namespace CapaDatos.Adapters
{
   public class CategoriaGastoAdapter
    {


       BDRinconLuzEntities contexto;

       public CategoriaGastoAdapter()
        {
            contexto = RinconLuzContext.Context;
        }

       public CategoriaGastoAdapter(string edicion)
        {
            contexto = RinconLuzContext.ContextNew;
        }


        public void Agregar(CategoriaGasto entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && entidad.ChangeTracker.State == ObjectState.Added)
            {
                contexto.RegistrarCambios(entidad);
                contexto.RealizarCambios();
            }
        }

        public void Eliminar(CategoriaGasto entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            IObjectSet<CategoriaGasto> objectSet = contexto.CrearSet<CategoriaGasto>();

            objectSet.Attach(entidad);
            objectSet.DeleteObject(entidad);
        }



        public void Modificar(CategoriaGasto entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && (entidad.ChangeTracker.State & ObjectState.Deleted) != ObjectState.Deleted)
            {
                entidad.MarkAsModified();
            }

            contexto.SaveChanges();
        }


        public IEnumerable<CategoriaGasto> Obtener()
        {
            return contexto.CrearSet<CategoriaGasto>();
        }

       

        public bool VerificarNombreDuplicado(string nombre, Guid id)
        {
            if (id == Guid.Empty)
            {
                var ExisteEntidad = (from v in contexto.CategoriaGasto
                                     where v.NombreCategoriaGasto.Trim().ToLower() == nombre.Trim().ToLower() &&
                                    v.Eliminada != true
                                     select v).Any();

                return ExisteEntidad;
            }
            else
            {
                var ExisteEntidad = (from v in contexto.CategoriaGasto
                                     where v.NombreCategoriaGasto.Trim().ToLower() == nombre.Trim().ToLower() && v.IdCategoriaGasto != id &&
                                    v.Eliminada != true
                                     select v).Any();

                return ExisteEntidad;

            }
        }


        
        public CategoriaGasto ObtenerEntidad(Guid idCategoria)
        {

            var Entidad = (from v in contexto.CategoriaGasto
                           where v.IdCategoriaGasto == idCategoria &&
                                    v.Eliminada != true
                           select v).First();
            return Entidad;

        }



        public List<ViewEntity> ObtenerListaCategorias()
        {
            List<ViewEntity> ListaFinal = new List<ViewEntity>();

            var Existe = (from v in contexto.CategoriaGasto
                          where v.Eliminada != true
                          select v).Any();

            if (Existe)
            {
                var Lista = (from v in contexto.CategoriaGasto
                             where v.Eliminada != true
                             select v).ToList();

                if (Lista.Count > 0)
                {

                    foreach (var item in Lista)
                    {
                        ListaFinal.Add(new ViewEntity(item.IdCategoriaGasto, item.NombreCategoriaGasto));
                    }

                }
            }

            return ListaFinal;
        }


        public bool TieneGastosIngresados(Guid idCategoria)
        {

            var ExisteEntidad = (from v in contexto.Gasto
                                 where v.IdCategoriaGasto == idCategoria &&
                                    v.Eliminado != true
                                 select v).Any();

            return ExisteEntidad;


        }






    }
}
